﻿// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证（版本 2.0）进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动！任何基于本项目二次开发而产生的一切法律纠纷和责任，我们不承担任何责任！

using Admin.NET.Application.SysncService.PlatFormSync;
using Admin.NET.Core.Service;
using Furion.Schedule;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using System.Text;

namespace Admin.NET.Application;

public class Startup : AppStartup
{
    public void ConfigureServices(IServiceCollection services)
    {
        // 住建平台日志服务
        services.AddSingleton<ZJLog>(new ZJLog());
        // 设备webSocket服务
        services.AddSingleton<ClientSocketService>(new ClientSocketService(5003));
        services.AddSingleton<IClientWebSocketManager, ClientWebSocketManager>();
        // 平台在线任务管理
        services.AddSingleton<IPlatFormJobManager, PlatFormJobManager>();
        

        // 添加主定时任务,每20秒执行一次,不允许并发执行,执行住建在线设备管理器的添加设备方法
        services.AddSchedule(options =>
        {
            var jobBuilder = JobBuilder.Create<PlatFormSyncJobMain>()
                .SetJobId("MainSync")   // 作业 Id
                .SetGroupName("ZjSync")
                .SetJobType<PlatFormSyncJobMain>()    // 作业类型，支持多个重载
                .SetDescription($"住建同步")   // 作业描述
                .SetConcurrent(false);   // 并行还是串行方式，false 为 串行
              
            options.AddJob(jobBuilder, Triggers.Period(20000));
            // options.AddJob<PlatFormSyncJobMain>("MainSync", concurrent: false, Triggers.Period(5000));
            // options.AddPersistence<DbJobPersistence>(); // 添加作业持久化器
            // options.AddMonitor<JobMonitor>(); // 添加作业执行监视器
        });


        // 扬尘
        //services.AddSchedule(options =>
        //{
        //    var jobBuilder = JobBuilder.Create<YangChenSyncJob>()
        //        .SetJobId("YangChenSync")   // 作业 Id
        //        .SetGroupName("YangChenSync")
        //        .SetJobType<YangChenSyncJob>()    // 作业类型，支持多个重载
        //        .SetDescription($"扬尘同步")   // 作业描述
        //        .SetConcurrent(false);   // 并行还是串行方式，false 为 串行

        //    options.AddJob(jobBuilder, Triggers.Period(30000));
        //    // options.AddJob<PlatFormSyncJobMain>("MainSync", concurrent: false, Triggers.Period(5000));
        //    // options.AddPersistence<DbJobPersistence>(); // 添加作业持久化器
        //    // options.AddMonitor<JobMonitor>(); // 添加作业执行监视器
        //});


        // 扬尘测试

        YangChengSync.Startup();



        // 设备同步人员

    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        app.UseScheduleUI();  // 注册定时任务UI界面
    }
}
